# Каскадное и множественное присваивание. Моржовый оператор

Давайте посмотрим, что будет, если связать одну переменную с другой:

```python
a = 5 
b = a
``` 

Теперь обе переменные будут ссылаться на один и тот же объект. 
То есть, копирования данных (создание нового объекта) не происходит, копируется лишь ссылка на объект. 
И это важный момент, который хорошо следует запомнить и понимать! 
В языке Python переменные не хранят значения, а лишь ссылаются на них. 

Как раз, благодаря этому можно одной и той же переменной присваивать самые разные типы данных:

```python
b = "Hello"
b = 0
b = -8.4
```
Это очень удобно при программировании. 

Но при этом всегда следует помнить, что переменная – это всего лишь ссылка на данные, а не сами данные.
Иногда, в программах можно встретить вариант каскадного присваивания:

```python
a = b = c = 0
```

В результате выполнения такой команды, все три переменные будут ссылаться на один и тот же объект со значением 0.
Если же мы хотим, чтобы каждая переменная ссылалась на свой отдельный объект, то можно воспользоваться множественным присваиванием:

```python
a, b = 1, 2
``` 
Здесь переменная `a` будет ссылаться на `1`, а `b` – на `2`. 
Используя такую команду, можно легко и просто выполнить операцию обмена значениями между двумя переменными:

```python
a, b = b, a
```


Python — один из языков, который строго относится к типам данных. 

Поэтому на любую несовместимость типов он ответит ошибкой. 

Все дело в сильной типизации.
 
Нам известно про два разных типа данных: числа и строки. 

Например, мы могли складывать числа, потому что операция сложения — это операция для типа «числа».

А что, если применить эту операцию не к двум числам, а к числу и строке?

```python
print(1 + '7')  # TypeError: unsupported operand type(s)...
```

Python не разрешит сложить число 1 и строку '7', потому что это значения разных типов. 

Нужно сначала либо сделать строку числом, либо число строкой. 

Как это сделать, мы поговорим позже.
 
Такое педантичное отношение к совместимости типов называется строгой типизацией или сильной типизацией. 

`Python` — язык со строгой типизацией.
 
Не все языки так делают. 

Например, `PHP` — это язык со слабой типизацией. 

Он знает о существовании разных типов, но относится к их использованию не очень строго. 

PHP пытается преобразовывать информацию, когда это кажется разумным. 

То же самое относится к `JavaScript`

### Функция type()

Так как в программе переменные могут иметь самые разные типы данных, то как можно узнать текущий тип, на который они ссылаются? Для этого в Python имеется специальная встроенная функция type(), возвращающая тип данных, связанный с указанной переменной:

```python
print(type(a))
```
В консоли увидим целочисленный тип данных (int). Давайте объявим еще две переменные:
```python
x = 5.8
s = "Hello"
```

И выведем для них типы:

```python
print(type(x), type(s))
```

Увидим `float` и `str`. 


Здесь у вас может возникнуть вопрос, а какие типы данных вообще существуют в Python? 

По мере прохождения курса, мы с вами познакомимся со всеми встроенными типами и постепенно у вас сложится общее представление.  

### Моржовое присваивание


```python
print(x := 5)
```